// NOTE: 由于这里引入connect,而数据模型又被路由引入,路由最终注入app.js => 所以不需要再在app.js中引入连接数据库
const mongoose = require('../connect');
// 构造函数
const Schema = mongoose.Schema;
const options = {
  // autoIndex 自动发送`createIndex`指令,
  // bufferCommands 局部禁用缓存
  collection: 'uid', // 自定义集合名,覆盖utils.toCollectionName方法默认生成collection的名称（生成模型名称的复数形式）
  minimize: false, // 默认(true)字段不保存空对象
  shardKey: { tag: 1, name: 1 }, // 分片相关
  // strict 默认为 true，这意味着你不能 save schema 里没有声明的属性, 可以在 Entity 级别重写
  // typeKey: '$type', type的别名??
  // versionKey 默认值__v (包含文件的内部修订号)
  useNestedStrict: true, // 不会忽略嵌套model的 strict 设定
  // timestamps: {// 自定义字段名称
  //   createdAt: 'createTime', updatedAt: 'updateTime'
  // }
  timestamps: true// 使用默认createdAt和updatedAt
  /* 
    替代_id的方式
    // var mongoose = require('mongoose')
    // var ObjectId = mongoose.Schema.Types.ObjectId
    // var StudentSchema = new Schema({})   //默认会有_id:ObjectId
    // var TeacherSchema = new Schema({id:ObjectId})  //只有id:ObjectId
  */
};

/** -----------------实例化数据模型------------------ */
const uid_schema = new Schema({
  username: {
    type: String,
    // default: 'koaers'
  },
  id: {
    type: Number,
    // default: 0
  }
}, options);

/**
 * 通过schema生成model
 * @param {String} 第一个是集合名的单数形式,数据库会自动生成(且自动加复数,后尾为数字则不加复数)--但是options已指定
 * @param {Object} schema
 */
module.exports = Uid = mongoose.model('uid', uid_schema);
